package lessons.no6;

import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;

/**
 * hashset 集合
 */
public class N6_5 {
    public static void main(String[] args) {
        N6_5 myclass = new N6_5();
        //myclass.testHashSet();
        //myclass.testTreeSet();
       myclass.testTreeSet2();
    }

    public void testHashSet()
    {
        System.out.println("### HashSet 集合 ###");
        HashSet<String> set = new HashSet<>();     // 创建HashSet集合
		set.add("Jack");                 // 向该Set集合中添加元素
		set.add("Eve");
		set.add("Rose");
		set.add("Rose");                // 向该Set集合中添加重复元素 

        System.out.println("### forEach 遍历 ###");
		// 遍历输出Set集合中的元素
		set.forEach(o -> System.out.println(o));

        System.out.println("### forEach 2 遍历 ###");
        for(String str:set)
        {
            System.out.println(""+str);
        }

        System.out.println("### Iterator 遍历 ###");
        Iterator<String> it = set.iterator();
        while(it.hasNext())
        {
            System.out.println(""+it.next());
        }

        System.out.println();
    }

    public void testTreeSet()
    {
        // 创建TreeSet集合
        TreeSet<Integer> ts = new TreeSet<>();     
		// 1、向TreeSet集合中添加元素
        
		ts.add(3);
		ts.add(9);
		ts.add(1);
		ts.add(21);
		System.out.println("创建的TreeSet集合为："+ts);
		// 2、获取首尾元素
		System.out.println("TreeSet集合首元素为："+ts.first());
		System.out.println("TreeSet集合尾部元素为："+ts.last());
		// 3、比较并获取元素
	    System.out.println("集合中小于或等于9的最大的一个元素为："
                               +ts.floor(9)); 
		System.out.println("集合中大于10的最小的一个元素为："+ts.higher(10));
	    System.out.println("集合中大于100的最小的一个元素为："
                               +ts.higher(100));
		// 4、删除元素
		Object first = ts.pollFirst();
		System.out.println("删除的第一个元素是："+first);
		System.out.println("删除第一个元素后TreeSet集合变为："+ts);
    }

    public void testTreeSet2()
    {
        TreeSet<Teacher> ts = new TreeSet<>();               
		ts.add(new Teacher("Jack",19));           
		ts.add(new Teacher("Rose",18));
		ts.add(new Teacher("Tom", 19));
		ts.add(new Teacher("Rose",18));
		System.out.println(ts);
    }
}
    //定义Teacher类实现Comparable接口
class Teacher implements Comparable { 
	String name;
	int age;
	public Teacher(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public String toString() {	        
		return name + ":" + age;
	}
	//重写Comparable接口的compareTo()方法
    @Override
    public int compareTo(Object obj) {
        // TODO Auto-generated method stub
        Teacher s = (Teacher) obj;	
		// 定义比较方式，先比较年龄age，再比较名称name     
		if(this.age -s.age > 0) {		
				return 1;
		}
		if(this.age -s.age == 0) {		
			return this.name.compareTo(s.name);	
		}
		return -1;
    }
}

